// 华为技术面真题

/**
给你一个整数 n 。请你先求出从 1 到 n 的每个整数 10 进制表示下的数位和（每一位上的数字相加），然后把数位和相等的数字放到同一个组中。

请你统计每个组中的数字数目，并返回数字数目并列最多的组有多少个。


输入：n = 13
输出：4
解释：总共有 9 个组，将 1 到 13 按数位求和后这些组分别是：
[1,10]，[2,11]，[3,12]，[4,13]，[5]，[6]，[7]，[8]，[9]。总共有 4 个组拥有的数字并列最多。
示例 2：

输入：n = 2
输出：2
解释：总共有 2 个大小为 1 的组 [1]，[2]。
示例 3：

输入：n = 15
输出：6
示例 4：

输入：n = 24
输出：5
 
提示：
1 <= n <= 10^4
 * 
 * 
 */

function maxGroup(n) {
    let arr = new Array(n).fill(0).map((_, i) => i + 1);
    let res = {};
    let maxLen = -Infinity;
    for (let i = 0; i < arr.length; i++) {
        let num = '' + arr[i];
        let sum = 0;
        for (let j = 0; j < num.length; j++) {
            sum += parseInt(num[j]);
        }

        if (res[sum]) {
            res[sum].push(arr[i]);
            maxLen = Math.max(res[sum].length, maxLen);
        } else {
            res[sum] = [arr[i]];
        }
    }
    console.log(`maxLen ${maxLen}`);
    let maxCount = 0;

    console.log(JSON.stringify(res));

    // let filterArr = [...res].filter(ele=> ele[1].length === maxLen);
    // let count = filterArr.length;

    Object.values(res).forEach((arr) => {
        const len = arr.length;
        if (arr.length === maxCount) {
            maxCount++;
        }
    });

    console.log(`${n} for count: ${maxCount}, arr: ${JSON.stringify(res)}`);

    return maxCount;
}

maxGroup(13); // 4
// maxGroup(2); // 2
// maxGroup(15); // 6
// maxGroup(24); // 5
